﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LosScrum.Models;

namespace LosScrum.Controllers
{
    public class RecursosController : Controller
    {

        RecursosWS.RecursosServicesClient proxy = new RecursosWS.RecursosServicesClient();
        
        private List<Recursos> CrearRecursos()
        {
            Tipo cub = new Tipo() { Codigo = 1, Nombre = "CUBÍCULO" };
            Tipo pc = new Tipo() { Codigo = 2, Nombre = "COMPUTADORA" };

            List<Recursos> recursos = new List<Recursos>();

            recursos.Add(new Recursos() { Codigo = 1, Nombre = "CUBÍCULO 1", Tipo = cub, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 2, Nombre = "CUBÍCULO 2", Tipo = cub, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 3, Nombre = "CUBÍCULO 3", Tipo = cub, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 4, Nombre = "CUBÍCULO 4", Tipo = cub, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 5, Nombre = "CUBÍCULO 5", Tipo = cub, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 6, Nombre = "COMPUTADORA 1", Tipo = pc, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 7, Nombre = "COMPUTADORA 2", Tipo = pc, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 8, Nombre = "COMPUTADORA 3", Tipo = pc, Estado = "A" });
            recursos.Add(new Recursos() { Codigo = 9, Nombre = "COMPUTADORA 4", Tipo = pc, Estado = "A" });
            return recursos;
        }

        private Recursos ObtenerRecursos(int codigo)
        {  
            List<Recursos> recursos = (List<Recursos>)Session["recursos"];

            Recursos model = recursos.Single(delegate(Recursos recurso) {
                if (recurso.Codigo == codigo) return true;
                else return false;
            });
            return model;



        }

        //
        // GET: /Recursos/

        public ActionResult Index()
        {
            //if (Session["recursos"] == null)
            //    Session["recursos"] = CrearRecursos();
            //List<Recursos> model = (List<Recursos>)Session["recursos"];
            //return View(model);

            return View(proxy.ListarRecursos());
        }

        //
        // GET: /Recursos/Details/5

        public ActionResult Details(int id)
        {
            //Recursos model = ObtenerRecursos(id);
            //return View(model);

            return View(proxy.ObtenerRecurso(id));
        }

        //
        // GET: /Recursos/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Recursos/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            //try
            //{
            //    List<Recursos> recursos = (List<Recursos>)Session["recursos"];
            //    recursos.Add(new Recursos()
            //    {
            //        Codigo = int.Parse(collection["Codigo"]),
            //        Nombre = collection["Nombre"],
            //        Estado = collection["Estado"],
            //        Tipo = new Tipo()
            //        {
            //            Codigo = int.Parse(collection["Tipo.Codigo"]),
            //            Nombre = collection["Tipo.Nombre"]
            //        }
            //    });

            //    return RedirectToAction("Index");
            //}
            //catch
            //{
            //    return View();
            //}

            try
            {
                string nombre = (string)collection["Nombre"];
                string estado = (string)collection["Estado"];
                int tipo = int.Parse(collection["Tipo.Codigo"]);
                proxy.CrearRecurso(nombre, estado, tipo);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }

        }
        
        //
        // GET: /Recursos/Edit/5
 
        public ActionResult Edit(int id)
        {
            //Recursos model = ObtenerRecursos(id);
            //return View(model);

            return View(proxy.ObtenerRecurso(id));
        }

        //
        // POST: /Recursos/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            //try
            //{
            //    Recursos model = ObtenerRecursos(id);
            //    model.Nombre= collection["Nombre"];
            //    model.Estado = collection["Estado"]; 
            //    return RedirectToAction("Index");
            //}
            //catch
            //{
            //    return View();
            //}

            try
            {
                string nombre = (string)collection["Nombre"];
                string estado = (string)collection["Estado"];
                int tipo = int.Parse(collection["tipoRecurso.Codigo"]);
                proxy.ModificarRecurso(id, nombre, estado, tipo);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }

        }

        //
        // GET: /Recursos/Delete/5
 
        public ActionResult Delete(int id)
        {
            //Recursos model = ObtenerRecursos(id);
            //return View(model);

            return View(proxy.ObtenerRecurso(id));
        }

        //
        // POST: /Recursos/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            //try
            //{
            //    List<Recursos> recursos = (List<Recursos>)Session["recursos"];
            //    recursos.Remove(ObtenerRecursos(id));
            //    return RedirectToAction("Index");
            //}
            //catch
            //{
            //    return View();
            //}

            try
            {
                proxy.EliminarRecurso(id);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
